網際內容管理系統在精密機械教學與研究上的應用

  • Home
    • Site Map
    • reveal
    • blog
  • About
  • 主機設定
    • Windows 10
      • Win 網站簽章
      • Win Oauth2
      • Oauth2 原理
      • Nginx
    • Ubuntu設定
      • Ubuntu 簽章
      • 配置 uwsgi
      • xrdp
  • fossiloauth
    • foauth_config
  • fossilapp
  • Fossil
  • 專題報告
  • Reference
    • Flutter
      • Flutter ref
    • discourse
      • 操作管理
    • cd2020pj1
      • Oauth2
    • Network
    • Ref
      • LaTeX
      • Automatic Control
      • 參考步驟
      • ebook1
      • Project
      • Ref2
      • Bond Graphs
      • KMOLBrowser
      • Glowscript
      • Rapydscript
      • Atoms
      • Samples
      • RLearning
      • Ebooks
      • Feedback
      • CMSiMDE
      • Git
      • Windows
      • Ubuntu
      • Heorku
      • Certbot
Win Oauth2 << Previous Next >> Nginx

Oauth2 原理

使用 Oauth2 協定讓使用者以 Gmail 帳號登入系統的目的, 在於無需管理使用者的帳號, 便能登入 Fossi SCM 網際系統, 具備使用 chat 與 forum 模組的權限.

實務上使用者登入後, 系統便會自動登出使用者的 Gmail 帳號, 並以 session 儲存使用者的帳號.

若使用者首次從 Oauth2 介面登入 Fossil SCM 網際系統, fossiloauth 網際程式會利用登入時所儲存的帳號資料, 在 Fossil SCM 網際系統 (即內定 repository) 中, 以隨機字串作為密碼, 建立能夠在 chat 與 forum 新增資料權限的帳號. 但該用戶因為無從得知與登入帳號對應的密碼, 因此無法利用該隨機密碼從 Fossill SCM 網際系統登入.

若使用者並非首次從 Oauth2 介面登入 Fossil SCM 網際系統, fossioauth 網際程式則會產生一組隨機字串修改該用戶登入時的對應密碼, 以便讓該用戶能夠利用新的隨機密碼登入, 進而編輯或新增 chat 與 forum 模組中的資料.

至於 fossiloauth 取得使用者登入帳號後, 配合隨機產生的字串作為密碼, 能夠在執行 /forum 函式後, 被 Fossil SCM 網際系統視為已經採特定身份 (可在程式中進行設定) 登入的設計, 則是利用 AJAX 將登入帳號與對應密碼以 post 送至 Fossil SCM 網際主機所建立的 session, 以 redirect 的方式轉址至 Fossil SCM 網際 forum 連結, 讓使用者被系統視為已經登入.

而此一 /forum 的程式設計如下:

@app.route('/forum')
@login_required
def forum():
    """Create forum routine"""
    # 從倉儲中取出該帳號對應的密碼
    username, userpass = repo()
    with requests.Session() as s:
        url = 'https://c1.kmol.info/pj2022/login'
        # "u" is the username input name for Fossil login form
        # 'p' is the password input name for Fossil login form
        post_var = {'u': username, 'p': userpass}
        headers = {'X-Requested-With': 'XMLHttpRequest'}
        result = s.post(url, data = post_var, headers = headers)
        cookie = s.cookies.get_dict()
        key = list(cookie.keys())[0]
        value = cookie[key]

        forum = "https://c1.kmol.info/pj2022/forum"
        response = make_response(redirect(forum))
        response.set_cookie(key, value, domain="c1.kmol.info", expires=None, path="C:/tmp")
        # logout from 8443
        logout()
        return response  


Win Oauth2 << Previous Next >> Nginx

Copyright © All rights reserved | This template is made with by Colorlib